home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2001 January / Game.EXE_01_2001.iso / demos / Blade of Darkness / data1.cab / Program_Executable_Files / Lib / Basic_Funcs.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-11-16  |  35.1 KB  |  883 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import Bladex
  5. import AuxTran
  6. import Actions
  7. import Blood
  8. import Damage
  9. import AniSound
  10. import Reference
  11. import pdb
  12. import CharStats
  13. import copy
  14. import ItemTypes
  15. import netgame
  16. import whrandom
  17. import MenuText
  18. import AuxFuncs
  19. import GenFX
  20. import Auras
  21. import ObjStore
  22. import GameStateAux
  23. import BInput
  24. import InitDataField
  25. import CombosFX
  26. new_combo_sound = Bladex.CreateSound('..\\..\\Sounds\\sesgado-lava.wav', 'NewComboSound')
  27. new_combo_sound.Volume = 1.0
  28. new_combo_sound.MinDistance = 5000
  29. new_combo_sound.MaxDistance = 20000
  30. RestoreEnergyTime = 1.0 / 20.0
  31. EnergyMin = 14.0
  32. RestoreEnergyRateMin = 0.005
  33. RestoreEnergyRateMax = 0.095
  34.  
  35. def RestoreEnergyFunc(EntityName):
  36.     Bladex.AddScheduledFunc(Bladex.GetTime() + RestoreEnergyTime, RestoreEnergyFunc, (EntityName,), 'PlayerRestoreEnergy')
  37.     pj = Bladex.GetEntity(EntityName)
  38.     if pj:
  39.         max_energy = CharStats.GetCharMaxEnergy(pj.Kind, pj.Level)
  40.         prev_energy = pj.Energy
  41.         if pj.InAttack:
  42.             energy2lose = min(pj.Data.LoseEnergyRate * RestoreEnergyTime, pj.Data.Energy2Lose)
  43.             pj.Energy = max(prev_energy - energy2lose, -max_energy * Reference.ENERGY_LOW_LEVEL)
  44.             pj.Data.Energy2Lose = pj.Data.Energy2Lose - energy2lose
  45.             if pj.Energy <= 0.0 and pj.AnmPos > 0.8:
  46.                 pj.Gof = 0
  47.                 pj.Gob = 0
  48.                 pj.Tl = 0
  49.                 pj.Tr = 0
  50.                 pj.InterruptCombat()
  51.                 pj.RaiseEvent('Interrupt')
  52.             
  53.         else:
  54.             energyF = pow(1.0 - pj.Level / (CharStats.GetMaxLevel() * 1.0), 2)
  55.             RestoreEnergyRate = energyF * (RestoreEnergyRateMax - RestoreEnergyRateMin) + RestoreEnergyRateMin
  56.             new_energy = max(min(prev_energy + RestoreEnergyRate * max_energy - pj.Data.Energy2Lose, max_energy), -max_energy * Reference.ENERGY_LOW_LEVEL)
  57.             pj.Energy = new_energy
  58.             pj.Data.Energy2Lose = 0.0
  59.     
  60.  
  61.  
  62. class PlayerPerson:
  63.     ObjId = 0
  64.     NPC = 0
  65.     Name = 'Unnamed'
  66.     DamageFactorNone = -0.001
  67.     DamageFactorLight = 0.1
  68.     DamageFactorHeavy = 0.35
  69.     TakeBleedingImpact = 0
  70.     ThrownBy = None
  71.     PowerPotion = 0
  72.     FAttack = 1.0
  73.     FDefense = 1.0
  74.     AimPressed = 0
  75.     stuff_onback_b4 = 0
  76.     toggle4t_clearback = 0
  77.     LoseEnergyRate = 0.0
  78.     Energy2Lose = 0.0
  79.     last_frwdup = -1
  80.     last_brwdup = -1
  81.     armour_level = 0
  82.     armour_prot_factor = 0
  83.     Poisoned = 0
  84.     NoFXOnHit = 1
  85.     Resistances = None
  86.     ObjectsTaken = []
  87.     LevelUpParticleData = []
  88.     Invincibility = 0
  89.     InventoryActive = 1
  90.     LastDamageType = ''
  91.     
  92.     def __init__(self, me):
  93.         self.inheritance = 0
  94.         self.InventoryActive = me.Name[0:6] != 'Player'
  95.         self.ObjId = ObjStore.GetNewId()
  96.         ObjStore.ObjectsStore[self.ObjId] = self
  97.         self.ObjectsTaken = []
  98.         self.LevelUpParticleData = []
  99.         self.Name = me.Name
  100.         me.DamageFunc = Damage.CalculateDamage
  101.         me.AttackFunc = Damage.CalculateFatigue
  102.         me.TakeFunc = self.TakeFunc
  103.         me.ThrowFunc = self.ThrowFunc
  104.         me.HitFunc = self.HitFunc
  105.         me.ImDeadFunc = self.PCImDead
  106.         me.NewComboFunc = self.StdNewCombo
  107.         me.BigFallFunc = self.StdBigFall
  108.         me.Life = CharStats.GetCharMaxLife(me.Kind, me.Level)
  109.         me.Energy = CharStats.GetCharMaxEnergy(me.Kind, me.Level)
  110.         me.AddAnmEventFunc('TakeArrow', Actions.TakeArrowEventHandler)
  111.         me.AddAnmEventFunc('CheckRefireBow', Actions.CheckRefireBowEventHandler)
  112.         me.AddAnmEventFunc('W2hToLeft', Actions.W2hToLeftHandler)
  113.         me.AddAnmEventFunc('W2hToRight', Actions.W2hToRightHandler)
  114.         me.AddAnmEventFunc('LaunchTrail', self.LaunchTrail)
  115.         me.AddAnmEventFunc('Start_Weapon', Actions.Start_Weapon)
  116.         me.AddAnmEventFunc('Stop_Weapon', Actions.Stop_Weapon)
  117.         me.AddAnmEventFunc('Start_Trail', Actions.Start_Trail)
  118.         me.AddAnmEventFunc('Stop_Trail', Actions.Stop_Trail)
  119.         me.AddAnmEventFunc('GraspString', Actions.GraspString)
  120.         me.AddAnmEventFunc('UnGraspString', Actions.UnGraspString)
  121.         me.AddAnmEventFunc('Start_Weapon_Special', Actions.Start_Weapon_Special)
  122.         me.AddAnmEventFunc('Stop_Weapon_Special', Actions.Stop_Weapon_Special)
  123.         me.AddAnmEventFunc('ElevatorDeath', Actions.QuickDeath)
  124.         if me.CharTypeExt in ('Kgt', 'Bar', 'Amz', 'Dwf'):
  125.             exec_string = 'CombosFX.' + me.CharTypeExt + 'CombosFX(me.Name)'
  126.             print 'asignando funciones a eventos para FX...'
  127.             print exec_string
  128.             exec exec_string
  129.         
  130.         me.MutilateFunc = self.MutilateFunc
  131.         inv = me.GetInventory()
  132.         inv.maxObjects = 15
  133.         self.Resistances = copy.copy(CharStats.GetCharResistances(me.Kind))
  134.         self.ResetSounds(self.Name)
  135.         if self.Name[0:6] == 'Player':
  136.             self.LevelUpParticleData = []
  137.             for i in range(30):
  138.                 r = 255
  139.                 g = 255
  140.                 b = 255
  141.                 a = 255.0 * traux
  142.                 size = 200.0 * aux
  143.                 self.LevelUpParticleData.append(a)
  144.                 self.LevelUpParticleData.append(size)
  145.                 Bladex.SetParticleGVal('LevelUpParticle', i, r, g, b, a, size)
  146.             
  147.             Bladex.AddScheduledFunc(Bladex.GetTime() + RestoreEnergyTime, RestoreEnergyFunc, (self.Name,), 'PlayerRestoreEnergy')
  148.         
  149.  
  150.     
  151.     def __del__(self):
  152.         del ObjStore.ObjectsStore[self.ObjId]
  153.  
  154.     
  155.     def ResetSounds(self, EntityName):
  156.         me = Bladex.GetEntity(EntityName)
  157.         kind = me.Kind[:len(me.Kind) - 2]
  158.         if kind == 'Barbarian':
  159.             AniSound.AsignarSonidosBarbaro(EntityName)
  160.         elif kind == 'Knight':
  161.             AniSound.AsignarSonidosCaballero(EntityName)
  162.         elif kind == 'Dwarf':
  163.             AniSound.AsignarSonidosEnano(EntityName)
  164.         elif kind == 'Amazon':
  165.             AniSound.AsignarSonidosAmazona(EntityName)
  166.         
  167.  
  168.     
  169.     def GetNewMembers(self):
  170.         bases = self.__class__.__bases__
  171.         new_members = { }
  172.         for i in bases:
  173.             base_dict = i.__dict__
  174.             for j in base_dict.keys():
  175.                 pass
  176.             
  177.         
  178.  
  179.     
  180.     def persistent_id(self):
  181.         return self.ObjId
  182.  
  183.     
  184.     def __save_core_funcs__(self):
  185.         me = Bladex.GetEntity(self.Name)
  186.         if not me:
  187.             print '__save_core_funcs__() Warning: trying to save a non existent entity', self.Name
  188.             return None
  189.         
  190.         core_funcs = []
  191.         j = 0
  192.         funcs = [
  193.             ('DamageFunc', Damage.CalculateDamage),
  194.             ('AttackFunc', Damage.CalculateFatigue),
  195.             ('TakeFunc', self.TakeFunc),
  196.             ('ThrowFunc', self.ThrowFunc),
  197.             ('HitFunc', self.HitFunc),
  198.             ('NewComboFunc', self.StdNewCombo),
  199.             ('BigFallFunc', self.StdBigFall)]
  200.         for i in funcs:
  201.             exec 'f = me.' + i[0]
  202.             if i[1] != f:
  203.                 print 'Save Core Func para', me.Name, ' callback ', i[0], ' funcion ', f
  204.                 core_funcs.append((j, GameStateAux.SaveFunctionAux(f)))
  205.             
  206.             j = j + 1
  207.         
  208.         if self.inheritance != 1:
  209.             funcs2 = [
  210.                 'SeeFunc',
  211.                 'HearFunc',
  212.                 'DelayNoSeenFunc',
  213.                 'NoAllowedAreaFunc',
  214.                 'EnemyNoAllowedAreaFunc',
  215.                 'ImHurtFunc',
  216.                 'EnemyDeadFunc',
  217.                 'AnmEndedFunc',
  218.                 'EnterCloseFunc',
  219.                 'EnterLargeFunc',
  220.                 'EnterPrimaryAAFunc',
  221.                 'EnterSecondaryAAFunc',
  222.                 'CharSeeingEnemyFunc',
  223.                 'ToggleCombatFunc']
  224.             for i in funcs2:
  225.                 exec 'f = me.' + i
  226.                 if f != None:
  227.                     print 'Save Core Func para', me.Name, ' callback ', i, ' funcion ', f
  228.                     core_funcs.append((j, GameStateAux.SaveFunctionAux(f)))
  229.                 
  230.                 j = j + 1
  231.             
  232.             if me.ImDeadFunc != self.PCImDead:
  233.                 core_funcs.append((j, GameStateAux.SaveFunctionAux(f)))
  234.             
  235.         
  236.         return core_funcs
  237.  
  238.     
  239.     def __load_core_funcs__(self, param):
  240.         me = Bladex.GetEntity(self.Name)
  241.         if not me:
  242.             print '__load_core_funcs__ -> Warning, trying to get a non existent entity', self.Name
  243.             return None
  244.         
  245.         funcs = [
  246.             'DamageFunc',
  247.             'AttackFunc',
  248.             'TakeFunc',
  249.             'ThrowFunc',
  250.             'HitFunc',
  251.             'NewComboFunc',
  252.             'BigFallFunc',
  253.             'SeeFunc',
  254.             'HearFunc',
  255.             'DelayNoSeenFunc',
  256.             'NoAllowedAreaFunc',
  257.             'EnemyNoAllowedAreaFunc',
  258.             'ImHurtFunc',
  259.             'EnemyDeadFunc',
  260.             'AnmEndedFunc',
  261.             'EnterCloseFunc',
  262.             'EnterLargeFunc',
  263.             'EnterPrimaryAAFunc',
  264.             'EnterSecondaryAAFunc',
  265.             'CharSeeingEnemyFunc',
  266.             'ToggleCombatFunc',
  267.             'ImDeadFunc']
  268.         for i in param:
  269.             print 'Load Core Func ', i[1], ' para ', me.Name, ' funcion ', funcs[i[0]]
  270.             
  271.             try:
  272.                 GameStateAux.LoadFunctionAux(i[1], me, funcs[i[0]])
  273.                 print 'Loaded for entity'
  274.             except:
  275.                 param
  276.                 GameStateAux.LoadFunctionAux(i[1], self, funcs[i[0]])
  277.                 exec 'me.%s=self.%s' % (funcs[i[0]], funcs[i[0]])
  278.  
  279.         
  280.  
  281.     
  282.     def __getstate__(self):
  283.         return (1, {
  284.             'PlayerPerson': (self.ObjId, self.NPC, self.Name, self.DamageFactorNone, self.DamageFactorLight, self.DamageFactorHeavy, self.TakeBleedingImpact, self.ThrownBy, self.PowerPotion, self.FAttack, self.FDefense, self.AimPressed, self.stuff_onback_b4, self.toggle4t_clearback, self.last_frwdup, self.last_brwdup, self.LoseEnergyRate, self.Energy2Lose, self.Resistances, self.armour_level, self.armour_prot_factor, self.Poisoned, self.ObjectsTaken, self.Invincibility, self.InventoryActive, self.LastDamageType, GameStateAux.SaveNewMembers(self), PlayerPerson.__save_core_funcs__(self)) })
  285.  
  286.     
  287.     def persistent_check(self):
  288.         me = Bladex.GetEntity(self.Name)
  289.         if not me:
  290.             return 0
  291.         
  292.         return 1
  293.  
  294.     
  295.     def __setstate__(self, parm):
  296.         version = parm[0]
  297.         if version == 1:
  298.             parms = parm[1]['PlayerPerson']
  299.             self.ObjId = parms[0]
  300.             ObjStore.ObjectsStore[self.ObjId] = self
  301.             self.NPC = parms[1]
  302.             self.Name = parms[2]
  303.             me = Bladex.GetEntity(self.Name)
  304.             me.DamageFunc = Damage.CalculateDamage
  305.             me.TakeFunc = self.TakeFunc
  306.             me.ThrowFunc = self.ThrowFunc
  307.             me.HitFunc = self.HitFunc
  308.             me.ImDeadFunc = self.PCImDead
  309.             me.NewComboFunc = self.StdNewCombo
  310.             me.BigFallFunc = self.StdBigFall
  311.             me.AttackFunc = Damage.CalculateFatigue
  312.             self.DamageFactorNone = parms[3]
  313.             self.DamageFactorLight = parms[4]
  314.             self.DamageFactorHeavy = parms[5]
  315.             self.TakeBleedingImpact = parms[6]
  316.             self.ThrownBy = parms[7]
  317.             self.PowerPotion = parms[8]
  318.             self.FAttack = parms[9]
  319.             self.FDefense = parms[10]
  320.             self.AimPressed = parms[11]
  321.             self.stuff_onback_b4 = parms[12]
  322.             self.toggle4t_clearback = parms[13]
  323.             self.last_frwdup = parms[14]
  324.             self.last_brwdup = parms[15]
  325.             self.LoseEnergyRate = parms[16]
  326.             self.Energy2Lose = parms[17]
  327.             self.Resistances = parms[18]
  328.             self.armour_level = parms[19]
  329.             self.armour_prot_factor = parms[20]
  330.             self.Poisoned = parms[21]
  331.             self.ObjectsTaken = parms[22]
  332.             self.Invincibility = parms[23]
  333.             self.InventoryActive = parms[24]
  334.             self.LastDamageType = parms[25]
  335.             GameStateAux.LoadNewMembers(self, parms[26])
  336.             PlayerPerson.__load_core_funcs__(self, parms[27])
  337.         else:
  338.             print 'ERROR, Incorrect version'
  339.             self.ObjId = ObjStore.GetNewId()
  340.             ObjStore.ObjectsStore[self.ObjId] = self
  341.         self.inheritance = 0
  342.         if self.Name[0:6] == 'Player':
  343.             self.LevelUpParticleData = []
  344.             for i in range(30):
  345.                 r = 255
  346.                 g = 255
  347.                 b = 255
  348.                 a = 255.0 * traux
  349.                 size = 200.0 * aux
  350.                 self.LevelUpParticleData.append(a)
  351.                 self.LevelUpParticleData.append(size)
  352.                 Bladex.SetParticleGVal('LevelUpParticle', i, r, g, b, a, size)
  353.             
  354.             Bladex.AddScheduledFunc(Bladex.GetTime() + RestoreEnergyTime, RestoreEnergyFunc, (self.Name,), 'PlayerRestoreEnergy')
  355.         
  356.         me = Bladex.GetEntity(self.Name)
  357.         if not me:
  358.             print 'PlayerPerson.__setstate__() Warning, can not get entity', self.Name
  359.             return None
  360.         
  361.         me.AddAnmEventFunc('TakeArrow', Actions.TakeArrowEventHandler)
  362.         me.AddAnmEventFunc('CheckRefireBow', Actions.CheckRefireBowEventHandler)
  363.         me.AddAnmEventFunc('W2hToLeft', Actions.W2hToLeftHandler)
  364.         me.AddAnmEventFunc('W2hToRight', Actions.W2hToRightHandler)
  365.         me.AddAnmEventFunc('LaunchTrail', self.LaunchTrail)
  366.         me.AddAnmEventFunc('Start_Weapon', Actions.Start_Weapon)
  367.         me.AddAnmEventFunc('Stop_Weapon', Actions.Stop_Weapon)
  368.         me.AddAnmEventFunc('Start_Trail', Actions.Start_Trail)
  369.         me.AddAnmEventFunc('Stop_Trail', Actions.Stop_Trail)
  370.         me.AddAnmEventFunc('Start_Weapon_Special', Actions.Start_Weapon_Special)
  371.         me.AddAnmEventFunc('Stop_Weapon_Special', Actions.Stop_Weapon_Special)
  372.         me.AddAnmEventFunc('ElevatorDeath', Actions.QuickDeath)
  373.         if me.CharTypeExt in ('Kgt', 'Bar', 'Amz', 'Dwf'):
  374.             exec_string = 'CombosFX.' + me.CharTypeExt + 'CombosFX(me.Name)'
  375.             exec exec_string
  376.         
  377.         me.MutilateFunc = self.MutilateFunc
  378.         self.NoFXOnHit = 1
  379.         self.ResetSounds(self.Name)
  380.  
  381.     
  382.     def MutilateFunc(self, EntityName, obj_name, x, y, z, nx, ny, nz, node):
  383.         print EntityName + ': MutilateFunc'
  384.         me = Bladex.GetEntity(EntityName)
  385.         if me and me.Kind != 'Skeleton':
  386.             Blood.Mutilate(EntityName, obj_name, x, y, z, nx, ny, nz, node)
  387.         
  388.         limb = Bladex.GetEntity(obj_name)
  389.         InitDataField.Initialise(limb)
  390.         limb.Data.NoFXOnHit = 1
  391.         print limb.Mass, node
  392.         if limb.Mass > 1.5 and limb.Mass < 7.0:
  393.             Reference.EntitiesSelectionData[obj_name] = Reference.DefaultSelectionData['Limb']
  394.             Reference.EntitiesObjectData[obj_name] = Reference.DefaultObjectData['Limb']
  395.         
  396.  
  397.     
  398.     def TakeFunc(self, MyName):
  399.         Actions.StdUse(MyName)
  400.  
  401.     
  402.     def ThrowFunc(self, MyName):
  403.         Actions.StdThrowObject(MyName)
  404.  
  405.     
  406.     def HitFunc(self, EntityName, WeaponName, Cx, Cy, Cz, Px, Py, Pz, WeaponCx, WeaponCy, WeaponCz, WeaponDx, WeaponDy, WeaponDz):
  407.         if self.TakeBleedingImpact:
  408.             Blood.BleedingImpact(Bladex.GetEntity(EntityName), Cx, Cy, Cz, Px, Py, Pz, Bladex.GetEntity(WeaponName), WeaponCx, WeaponCy, WeaponCz, WeaponDx, WeaponDy, WeaponDz)
  409.             self.TakeBleedingImpact = 0
  410.         
  411.  
  412.     
  413.     def ReSpawn(self, EntityName):
  414.         print 'Respawn Func'
  415.         me = Bladex.GetEntity(EntityName)
  416.         right = me.InvRight
  417.         left = me.InvLeft
  418.         rightback = me.InvRightBack
  419.         leftback = me.InvLeftBack
  420.         self.UnlinkAll(EntityName, '')
  421.         inv = me.GetInventory()
  422.         if rightback:
  423.             inv.LinkRightHand(rightback)
  424.             inv.LinkBack(rightback)
  425.         
  426.         if leftback:
  427.             inv.LinkLeftHand(leftback)
  428.             inv.LinkBack(leftback)
  429.         
  430.         if right:
  431.             inv.LinkRightHand(right)
  432.         
  433.         if left:
  434.             inv.LinkLeftHand(left)
  435.         
  436.         me.Life = CharStats.GetCharMaxLife(me.Kind, me.Level)
  437.         me.Energy = CharStats.GetCharMaxEnergy(me.Kind, me.Level)
  438.         me.ResetWounds()
  439.         if self.Poisoned:
  440.             self.UnVenom()
  441.         
  442.         (x, y, z) = me.Position
  443.         import darfuncs
  444.         darfuncs.CleanArea(x, y, z, 5000.0)
  445.         if netgame.GetNetState() == 0:
  446.             Bladex.AddScheduledFunc(Bladex.GetTime() + 0.2, self.RelinkCamera, (), 'RelinkCamera')
  447.         
  448.         angle = me.Angle
  449.         me.Orientation = (0.0, 3.62407746479e-007, 0.707107365131, -0.707106947899)
  450.         me.Angle = angle
  451.  
  452.     
  453.     def RelinkCamera(self):
  454.         cam = Bladex.GetEntity('Camera')
  455.         cam.SetPersonView('Player1')
  456.  
  457.     
  458.     def UnlinkAll(self, EntityName, EventName):
  459.         me = Bladex.GetEntity(EntityName)
  460.         me.UnlinkChildren()
  461.  
  462.     
  463.     def GetResistance(self, DamageType):
  464.         if self.Resistances.has_key(DamageType):
  465.             resistance = self.Resistances[DamageType]
  466.         else:
  467.             resistance = 0.0
  468.         resistance = min(max(resistance, 0.0), 1.0)
  469.         me = Bladex.GetEntity(self.Name)
  470.         return resistance
  471.  
  472.     
  473.     def UnVenom(self):
  474.         self.Poisoned = 0
  475.  
  476.     
  477.     def ReVenom(self, EntityName, VenomStrength, TimeRemaining, Frequency, Poisoner):
  478.         if self.Poisoned:
  479.             if BInput.GetInputManager().GetInputActionsSet() != 'Default':
  480.                 Bladex.AddScheduledFunc(Bladex.GetTime() + Frequency, self.ReVenom, (EntityName, VenomStrength, TimeRemaining, Frequency, Poisoner), self.Name + 'ReVenom')
  481.             else:
  482.                 isServer = netgame.GetNetState() == 1
  483.                 NextTimeRemaining = TimeRemaining - Frequency
  484.                 me = Bladex.GetEntity(EntityName)
  485.                 if me and me.Life > 0:
  486.                     special_resistance = self.GetResistance('Venom')
  487.                     if special_resistance < 1.0:
  488.                         if NextTimeRemaining > 0.0:
  489.                             Bladex.AddScheduledFunc(Bladex.GetTime() + Frequency, self.ReVenom, (EntityName, VenomStrength, NextTimeRemaining, Frequency, Poisoner), self.Name + 'ReVenom')
  490.                         else:
  491.                             VenomStrength = VenomStrength * (TimeRemaining / Frequency)
  492.                             self.Poisoned = self.Poisoned - 1
  493.                             if not (self.Poisoned):
  494.                                 self.UnVenom()
  495.                             
  496.                         current_venom_damage = VenomStrength - VenomStrength * special_resistance
  497.                         me.Life = me.Life - current_venom_damage
  498.                         if me.Life <= 0:
  499.                             if isServer:
  500.                                 Damage.PlayerHitFunc(me.Name, Poisoner, me.Life, 1)
  501.                                 self.UnVenom()
  502.                             
  503.                             enemy = Bladex.GetEntity(Poisoner)
  504.                             if enemy:
  505.                                 
  506.                                 try:
  507.                                     enemy.Data.OnKilledEnemy(EntityName)
  508.                                 except:
  509.                                     pass
  510.  
  511.                             
  512.                         
  513.                     else:
  514.                         self.UnVenom()
  515.                 
  516.         
  517.  
  518.     
  519.     def EnVenom(self, EntityName, VenomStrength, Poisoner):
  520.         me = Bladex.GetEntity(EntityName)
  521.         if me and me.Life > 0:
  522.             special_resistance = self.GetResistance('Venom')
  523.             if special_resistance < 1.0:
  524.                 time = Bladex.GetTime()
  525.                 if not (self.Poisoned):
  526.                     aura = Auras.MakeAura(EntityName, 0.7, (55, 0.1, 1.0, 1, 0, 0), (), (), (2, 0.0, 0.35, 0.0, 0.2, 0.0, 0.0, 0.35, 0.0, 0.1, 1.0))
  527.                     aura.Data.AddEvent(time + 0.2, (45, 1.0, 1.0, 1, 0, 0), (), (), (2, 0.0, 0.35, 0.0, 0.2, 0.0, 0.0, 0.35, 0.0, 0.1, 1.0))
  528.                     aura.Data.AddEvent(time + 0.7, (5, 0.1, 1.0, 1, 0, 0), (), (), (2, 0.0, 0.35, 0.0, 0.2, 0.0, 0.0, 0.35, 0.0, 0.1, 1.0))
  529.                 
  530.                 self.Poisoned = self.Poisoned + 1
  531.                 VenomTime = 60.0
  532.                 Frequency = 5.0
  533.                 Bladex.AddScheduledFunc(time + Frequency, self.ReVenom, (EntityName, VenomStrength, VenomTime, Frequency, Poisoner), self.Name + 'ReVenom')
  534.             
  535.         
  536.  
  537.     
  538.     def LaunchTrail(self, EntityName, EventName):
  539.         me = Bladex.GetEntity(EntityName)
  540.         if me and me.InvRight:
  541.             (x, y, z) = me.Rel2AbsPoint(1000.0, 0.0, 0.0)
  542.             trail = ItemTypes.MakeHalfmoonTrail(EntityName + 'Trail', x, y, z, EntityName)
  543.             trail.Data.ThrowReleaseEventHandler(EntityName, '')
  544.         
  545.  
  546.     
  547.     def FreezeAnmEnd(self, EntityName):
  548.         Bladex.GetEntity(EntityName).Freeze()
  549.  
  550.     
  551.     def PCImDead(self, EntityName):
  552.         me = Bladex.GetEntity(EntityName)
  553.         me.AddAnmEventFunc('UnlinkAll', self.UnlinkAll)
  554.         already_death = 0
  555.         Damage.DropInvalidObjectsOnImpact(EntityName)
  556.         anim_name = me.AnimName
  557.         if anim_name[0] == 'D' or anim_name[0] == 'd':
  558.             if (anim_name[1] == 'T' or anim_name[1] == 't') and anim_name[2] == 'H' or anim_name[2] == 'h':
  559.                 already_death = 1
  560.             
  561.         if already_death == 0:
  562.             death_anim = 'dth0'
  563.             if me.MutilationsMask == 2:
  564.                 dth_prob = whrandom.uniform(0.0, 1.0)
  565.                 if dth_prob < 0.142:
  566.                     death_anim = 'dth_c1'
  567.                 elif dth_prob < 0.286:
  568.                     death_anim = 'dth_c2'
  569.                 elif dth_prob < 0.428:
  570.                     death_anim = 'dth_c3'
  571.                 elif dth_prob < 0.571:
  572.                     death_anim = 'dth_c4'
  573.                 elif dth_prob < 0.714:
  574.                     death_anim = 'dth_c5'
  575.                 elif dth_prob < 0.857:
  576.                     death_anim = 'dth_c6'
  577.                 else:
  578.                     death_anim = 'dth_c7'
  579.             else:
  580.                 dth_prob = whrandom.uniform(0.0, 1.0)
  581.                 if dth_prob < 0.142:
  582.                     death_anim = 'dth_n00'
  583.                 elif dth_prob < 0.286:
  584.                     death_anim = 'dth_n01'
  585.                 elif dth_prob < 0.428:
  586.                     death_anim = 'dth_n02'
  587.                 elif dth_prob < 0.571:
  588.                     death_anim = 'dth_n03'
  589.                 elif dth_prob < 0.714:
  590.                     death_anim = 'dth_n04'
  591.                 elif dth_prob < 0.857:
  592.                     death_anim = 'dth_n05'
  593.                 else:
  594.                     death_anim = 'dth_n06'
  595.             me.Wuea = Reference.WUEA_ENDED
  596.             launch_new = 1
  597.             if (me.MutilationsMask == 512 or me.MutilationsMask == 256) and Bladex.AnmTypeRSteps(EntityName, death_anim) > 1:
  598.                 launch_new = 0
  599.             elif (me.MutilationsMask == 128 or me.MutilationsMask == 64) and Bladex.AnmTypeLSteps(EntityName, death_anim) > 1:
  600.                 launch_new = 0
  601.             
  602.             if launch_new == 1:
  603.                 me.LaunchAnmType(death_anim)
  604.             
  605.             if me.AnimName != death_anim:
  606.                 me.LaunchAnmType('dth0')
  607.                 if me.AnimName != 'dth0':
  608.                     print 'BUG? -> Basdic_Funcs.py , def PCImDead()'
  609.                 
  610.             
  611.         
  612.         if self.NPC:
  613.             return None
  614.         
  615.         cam = Bladex.GetEntity('Camera')
  616.         if EntityName == cam.ETarget:
  617.             cam.SType = 0
  618.             cam.TType = 2
  619.             cam.ETarget = 'Player1'
  620.         
  621.         if netgame.GetNetState() == 0:
  622.             if Reference.DEMO_MODE == 0:
  623.                 if not (self.NPC):
  624.                     if Reference.PYTHON_DEBUG >= 2:
  625.                         if me.Wuea == Reference.WUEA_ENDED:
  626.                             print 'Respawning now!, no death anim'
  627.                             self.ReSpawn(EntityName)
  628.                         else:
  629.                             me.AnmEndedFunc = self.ReSpawn
  630.                     else:
  631.                         import SaveGame
  632.                         
  633.                         try:
  634.                             object = Bladex.GetEntity(me.InvLeft)
  635.                             if me.InvLeft and object and not (object.TestHit):
  636.                                 Actions.RemoveFromInventory(me, object, 'DropLeftEvent')
  637.                                 object.Impulse(0.0, 0.0, 0.0)
  638.                         except AttributeError:
  639.                             pdb.set_trace()
  640.  
  641.                         
  642.                         try:
  643.                             object = Bladex.GetEntity(me.InvRight)
  644.                             if me.InvRight and object and not (object.TestHit):
  645.                                 Actions.RemoveFromInventory(me, object, 'DropRightEvent')
  646.                                 object.Impulse(0.0, 0.0, 0.0)
  647.                         except AttributeError:
  648.                             pdb.set_trace()
  649.  
  650.                         if me.Wuea == Reference.WUEA_ENDED:
  651.                             print 'no death anim... So Fade an go!'
  652.                             SaveGame.MenuStart(EntityName)
  653.                         else:
  654.                             me.AnmEndedFunc = SaveGame.MenuStart
  655.                 
  656.             elif not (self.NPC):
  657.                 Bladex.AddScheduledFunc(Bladex.GetTime() + 5.0, Bladex.LoadLevel, (Bladex.GetCurrentMap(),), 'ReloadAfterDeath')
  658.             
  659.         else:
  660.             me.AnmEndedFunc = self.FreezeAnmEnd
  661.  
  662.     
  663.     def OnKilledEnemy(self, KilledEntityName):
  664.         Reference.debugprint('OnKilledEnemy')
  665.         KilledEntity = Bladex.GetEntity(KilledEntityName)
  666.         if KilledEntity is None:
  667.             print 'OnKilledEnemy(): Error: None Entity'
  668.             return None
  669.         
  670.         me = Bladex.GetEntity(self.Name)
  671.         me.PartialLevel = me.PartialLevel + CharStats.GetCharExperienceReward(KilledEntity.CharType, KilledEntity.Level)
  672.         LevelLimit = CharStats.GetCharExperienceCost(me.CharType, me.Level)
  673.         if self.Name == 'Player1':
  674.             import Scorer
  675.             if me.PartialLevel >= LevelLimit:
  676.                 me.PartialLevel = me.PartialLevel - LevelLimit
  677.                 me.Level = me.Level + 1
  678.                 Scorer.LevelUp()
  679.                 Scorer.SetLevelLimits(0, CharStats.GetCharExperienceCost(me.CharType, me.Level))
  680.                 maxsize = 40 + 5 * me.Level
  681.                 maxPPS = 60 + 22 * me.Level
  682.                 maxint = 0.2 + 0.15 * me.Level
  683.                 AuraParams = (5, 0, 1, 0, 0, 1)
  684.                 AuraGradient = (2, 0.4, 0.6, 1.0, 0.5, 0.0, 0.1, 0.2, 1.0, 0.0, 0.8)
  685.                 AuraVar1Args = (5, maxsize, 0, 1, 0.5)
  686.                 AuraVar2Args = (maxsize, 5, 1, 0, 1.0)
  687.                 PSParams = (self.LevelUpParticleData, 'LevelUpParticle', 30, 50, 150, 255, maxPPS, -600, 0.0, 2, 2, 0.4, 30, 0.5)
  688.                 GenFX.LevelUpFX('Player1', 0, AuraParams, AuraGradient, AuraVar1Args, AuraVar2Args, PSParams, maxint, 'Timer15', 15, '..\\..\\Sounds\\aparicion-escudo.wav')
  689.                 if me.Life > 0:
  690.                     me.ResetWounds()
  691.                     me.Life = CharStats.GetCharMaxLife(me.Kind, me.Level)
  692.                 
  693.                 Scorer.SlideTBS(0)
  694.                 Scorer.LevelUpFlash()
  695.             
  696.             if netgame.GetNetState() == 0:
  697.                 Scorer.SetLevelBarValue(me.PartialLevel)
  698.             
  699.         
  700.  
  701.     
  702.     def RespondToHit(self, EntityName, AttackerName, DamagePoints, DamageType, DamageZone, Shielded):
  703.         me = Bladex.GetEntity(EntityName)
  704.         weapon_flag = Reference.W_FLAG_1H
  705.         if me.InvRight:
  706.             weapon_flag = Reference.GiveWeaponFlag(me.InvRight)
  707.         
  708.         if DamagePoints <= 0 and Shielded and me.GetInventory().GetMagicShield():
  709.             return None
  710.         
  711.         if me and me.Life > 0:
  712.             damage_factor = DamagePoints / (me.Life + DamagePoints)
  713.             if damage_factor > me.Data.DamageFactorNone:
  714.                 if DamageZone >= 0 and DamageZone < 32:
  715.                     me.SetWoundedZone(DamageZone, 1)
  716.                 
  717.                 do_not_abort = 0
  718.                 if me.AnimName == 'df_s_broken' or me.AnimName == 'sword_broken':
  719.                     do_not_abort = 1
  720.                 
  721.                 if do_not_abort == 0:
  722.                     Damage.DropInvalidObjectsOnImpact(EntityName)
  723.                     me.Wuea = Reference.WUEA_ENDED
  724.                     if me.InCombat:
  725.                         me.InterruptCombat()
  726.                         if Shielded:
  727.                             if damage_factor <= (me.Data.DamageFactorLight + me.Data.DamageFactorHeavy) / 2.0:
  728.                                 Reference.debugprint('Launching .df_01')
  729.                                 if weapon_flag == Reference.W_FLAG_2W:
  730.                                     me.LaunchAnmType('df_01_2w')
  731.                                 elif weapon_flag == Reference.W_FLAG_AXE:
  732.                                     me.LaunchAnmType('df_01_axe')
  733.                                 elif weapon_flag == Reference.W_FLAG_SP:
  734.                                     me.LaunchAnmType('df_01_spear')
  735.                                 else:
  736.                                     me.LaunchAnmType('df_01')
  737.                             else:
  738.                                 Reference.debugprint('Launching .df_02')
  739.                                 if weapon_flag == Reference.W_FLAG_2W:
  740.                                     me.LaunchAnmType('df_02_2w')
  741.                                 elif weapon_flag == Reference.W_FLAG_AXE:
  742.                                     me.LaunchAnmType('df_02_axe')
  743.                                 elif weapon_flag == Reference.W_FLAG_SP:
  744.                                     me.LaunchAnmType('df_02_spear')
  745.                                 else:
  746.                                     me.LaunchAnmType('df_02')
  747.                         elif damage_factor <= me.Data.DamageFactorLight:
  748.                             Reference.debugprint('Launching .hurt_f_lite')
  749.                             me.LaunchAnmType('hurt_f_lite')
  750.                         elif damage_factor >= me.Data.DamageFactorHeavy:
  751.                             Reference.debugprint('Launching .hurt_f_big')
  752.                             me.LaunchAnmType('hurt_f_big')
  753.                         elif DamageZone == Reference.BODY_HEAD:
  754.                             Reference.debugprint('Launching .hurt_f_head')
  755.                             me.LaunchAnmType('hurt_f_head')
  756.                         elif DamageZone == Reference.BODY_FRONT:
  757.                             Reference.debugprint('Launching .hurt_f_breast')
  758.                             me.LaunchAnmType('hurt_f_breast')
  759.                         elif DamageZone == Reference.BODY_BACK:
  760.                             Reference.debugprint('Launching .hurt_f_back')
  761.                             me.LaunchAnmType('hurt_f_back')
  762.                         elif DamageZone == Reference.BODY_RARM or DamageZone == Reference.BODY_RHAND:
  763.                             Reference.debugprint('Launching .hurt_f_r_arm')
  764.                             me.LaunchAnmType('hurt_f_r_arm')
  765.                         elif DamageZone == Reference.BODY_LARM or DamageZone == Reference.BODY_LHAND:
  766.                             Reference.debugprint('Launching .hurt_f_l_arm')
  767.                             me.LaunchAnmType('hurt_f_l_arm')
  768.                         elif DamageZone == Reference.BODY_RLEG or DamageZone == Reference.BODY_RFOOT:
  769.                             Reference.debugprint('Launching .hurt_f_r_leg')
  770.                             me.LaunchAnmType('hurt_f_r_leg')
  771.                         elif DamageZone == Reference.BODY_LLEG or DamageZone == Reference.BODY_LFOOT:
  772.                             Reference.debugprint('Launching .hurt_f_l_leg')
  773.                             me.LaunchAnmType('hurt_f_l_leg')
  774.                         
  775.                     elif me.Run:
  776.                         Reference.debugprint('Launching .hurt_jog')
  777.                         me.LaunchAnmType('hurt_jog')
  778.                     elif Shielded:
  779.                         if damage_factor <= (me.Data.DamageFactorLight + me.Data.DamageFactorHeavy) / 2.0:
  780.                             Reference.debugprint('Launching .df_01')
  781.                             if weapon_flag == Reference.W_FLAG_2W:
  782.                                 me.LaunchAnmType('df_01_2w')
  783.                             elif weapon_flag == Reference.W_FLAG_AXE:
  784.                                 me.LaunchAnmType('df_01_axe')
  785.                             elif weapon_flag == Reference.W_FLAG_SP:
  786.                                 me.LaunchAnmType('df_01_spear')
  787.                             else:
  788.                                 me.LaunchAnmType('df_01')
  789.                         else:
  790.                             Reference.debugprint('Launching .df_02')
  791.                             if weapon_flag == Reference.W_FLAG_2W:
  792.                                 me.LaunchAnmType('df_02_2w')
  793.                             elif weapon_flag == Reference.W_FLAG_AXE:
  794.                                 me.LaunchAnmType('df_02_axe')
  795.                             elif weapon_flag == Reference.W_FLAG_SP:
  796.                                 me.LaunchAnmType('df_02_spear')
  797.                             else:
  798.                                 me.LaunchAnmType('df_02')
  799.                     elif DamageZone == Reference.BODY_HEAD:
  800.                         Reference.debugprint('Launching .hurt_head')
  801.                         me.LaunchAnmType('hurt_head')
  802.                     elif DamageZone == Reference.BODY_FRONT:
  803.                         Reference.debugprint('Launching .hurt_breast')
  804.                         me.LaunchAnmType('hurt_breast')
  805.                     elif DamageZone == Reference.BODY_BACK:
  806.                         Reference.debugprint('Launching .hurt_back')
  807.                         me.LaunchAnmType('hurt_back')
  808.                     elif DamageZone == Reference.BODY_RARM or DamageZone == Reference.BODY_RHAND:
  809.                         Reference.debugprint('Launching .hurt_r_arm')
  810.                         me.LaunchAnmType('hurt_r_arm')
  811.                     elif DamageZone == Reference.BODY_LARM or DamageZone == Reference.BODY_LHAND:
  812.                         Reference.debugprint('Launching .hurt_l_arm')
  813.                         me.LaunchAnmType('hurt_l_arm')
  814.                     elif DamageZone == Reference.BODY_RLEG or DamageZone == Reference.BODY_RFOOT:
  815.                         Reference.debugprint('Launching .hurt_r_leg')
  816.                         me.LaunchAnmType('hurt_r_leg')
  817.                     elif DamageZone == Reference.BODY_LLEG or DamageZone == Reference.BODY_LFOOT:
  818.                         Reference.debugprint('Launching .hurt_l_leg')
  819.                         me.LaunchAnmType('hurt_l_leg')
  820.                     
  821.                 
  822.             
  823.         
  824.  
  825.     
  826.     def StdNewCombo(self, EntityName, ComboName):
  827.         if netgame.GetNetState() == 0:
  828.             import GameText
  829.             me = Bladex.GetEntity(EntityName)
  830.             if EntityName != 'Player1':
  831.                 return None
  832.             
  833.             ComboTXT = GameText.GetComboName(EntityName, ComboName)
  834.             if ComboTXT:
  835.                 GameText.WriteTextAux(MenuText.GetMenuText('New Attack') + ': ' + ComboTXT, 2.0, 255, 255, 255, [])
  836.                 new_combo_sound.Stop()
  837.                 new_combo_sound.PlayStereo()
  838.             
  839.         
  840.  
  841.     
  842.     def StdBigFall(self, EntityName, Dist):
  843.         me = Bladex.GetEntity(EntityName)
  844.         chartype = Bladex.GetCharType(me.CharType, me.CharTypeExt)
  845.         if Dist >= chartype.DieFall:
  846.             return None
  847.         
  848.         if Dist < 5000:
  849.             return None
  850.         
  851.         diff = (Dist - 5000.0) * 0.001
  852.         fall_damage = ((Dist - 5000.0) / (chartype.DieFall - 5000)) * 70.0
  853.         me.Life = me.Life - fall_damage
  854.         if netgame.GetNetState() == 1:
  855.             if me.Life <= 0:
  856.                 Damage.PlayerHitFunc(me.Name, 'Fall', me.Life, 1)
  857.             
  858.         
  859.  
  860.     
  861.     def RegisterObjectAsTaken(self, ObjectName):
  862.         object = Bladex.GetEntity(ObjectName)
  863.         if object:
  864.             kind = object.Kind
  865.             if not self.ObjectsTaken.count(kind):
  866.                 self.ObjectsTaken.append(kind)
  867.             
  868.         
  869.  
  870.     
  871.     def WasObjectAlreadyTaken(self, ObjectName):
  872.         object = Bladex.GetEntity(ObjectName)
  873.         if object:
  874.             kind = object.Kind
  875.             return self.ObjectsTaken.count(kind)
  876.         
  877.  
  878.     
  879.     def GetObjectsTaken(self):
  880.         return self.ObjectsTaken
  881.  
  882.  
  883.